다중 테이블 연산

✒️ 2025-06-05 18:21 내용 수정


SUBQUERY

사용 위치 특징
FROM절 (IN LINE VIEW) 하나의 테이블처럼 사용. 이름(별칭)을 지정해야 함
SELECT (SCALAR) 하나의 컬럼처럼 사용
WHERE절 (SUBQUERY) 하나의 변수처럼 사용
-- WHERE 조건문에서의 SUBQUERY 사용
SELECT 컬럼명1, 컬럼명2, ... 
FROM 테이블명
WHERE 컬럼명 연산자 (
	SELECT 컬럼명 -- 변수처럼 사용됨
	FROM 테이블명
	WHERE 조건문
);

-- FROM 절에서의 SUBQUERY 사용
SELECT 컬럼명1, 컬럼명2, ... 
FROM (
	SELECT 컬럼명1, 컬럼명2, ... -- 테이블처럼 사용됨
	FROM 테이블명
	WHERE 조건문
) AS 이름
WHERE 조건문;

-- GROUP BY와 HAVING에서의 SUBQUERY 사용
SELECT 컬럼명1, 컬럼명2, ... 
FROM 테이블명
WHERE 조건문
GROUP BY 컬럼명
HAVING 집계함수 연산자 (
	SELECT 컬럼명
	FROM 테이블명
	WHERE 조건문
);

-- SELECT에서 사용
SELECT 컬럼명1,
(
	SELECT 컬럼명A, 컬럼명B, .. -- 컬럼처럼 사용됨
	FROM 테이블명
	WHERE 조건문
)
FROM 테이블명
WHERE 조건문;

JOIN


1. INNER JOIN

INNER JOIN.png

SELECT 컬럼명1, 컬럼명2, ...
FROM 테이블1 (INNER) JOIN 테이블2 -- INNER 표기 생략 가능
ON 테이블1.JOIN컬럼 = 테이블2.JOIN컬럼;

-- 별칭을 사용해 표현할 수 있다.
SELECT 별칭1.컬럼명1, 별칭1.컬럼명2, 별칭2.컬럼명1, 별칭2.컬럼명2, ...
FROM 테이블1 별칭1 (INNER) JOIN 테이블2 별칭2
ON 별칭1.JOIN컬럼 = 별칭2.JOIN컬럼;
-- 두 테이블의 속성이 같은 조건 + 특정 컬럼의 필터링 조건
SELECT 별칭1.컬럼명1, 별칭1.컬럼명2, 별칭2.컬럼명1, 별칭2.컬럼명2, ...
FROM 테이블1 별칭1 (INNER) JOIN 테이블2 별칭2
ON 별칭1.JOIN컬럼 = 별칭2.JOIN컬럼
AND 컬럼조건식;
SELECT s.student_id, s.name, g.final_score
FROM students s LEFT JOIN grades g
ON s.student_id = g.student_id
AND g.course_code = 'MA101';

1) SELF INNER JOIN

SELECT 테이블1.컬럼명, 테이블1.컬렴명
FROM 테이블1 별칭1 JOIN 테이블1 별칭2 -- 테이블1 = 테이블2, 구분을 위해 별칭 사용
ON 별칭1.JOIN컬럼 = 별칭2.JOIN컬럼;

2) CROSS INNER JOIN

SELECT 테이블1.컬럼명, 테이블2.컬럼명
FROM 테이블1 CROSS JOIN 테이블2;

3) Natural JOIN

SELECT 테이블1.컬럼명, 테이블2.컬럼명
FROM 테이블1 NATURAL JOIN 테이블2;

2. OUTER JOIN

1) LEFT OUTER JOIN

LEFT OUTER JOIN.png

SELECT 별칭1.컬럼명, 별칭2.컬럼명
FROM 테이블1 별칭1 LEFT OUTER JOIN 테이블2 별칭2 -- 테이블1의 전체, 둘의 공통값
ON 별칭1.JOIN컬럼 = 별칭2.JOIN컬럼;

2) RIGHT OUTER JOIN

RIGHT OUTER JOIN.png

SELECT 별칭1.컬럼명, 별칭2.컬럼명
FROM 테이블1 별칭1 RIGHT OUTER JOIN 테이블2 별칭2 -- 테이블2의 전체, 둘의 공통값
ON 별칭1.JOIN컬럼 = 별칭2.JOIN컬럼;

3) FULL OUTER JOIN

FULL OUTER JOIN.png

SELECT 별칭1.컬럼명, 별칭2.컬럼명
FROM 테이블1 별칭1 FULL OUTER JOIN 테이블2 별칭2 -- 두 테이블 전체
ON 별칭1.JOIN컬럼 = 별칭2.JOIN컬럼;

UNION

1. UNION

SELECT 테이블1.컬럼명1, 테이블1.컬럼명2
FROM 테이블1
UNION
SELECT 테이블2.컬럼명2, 테이블2.컬럼명2
FROM 테이블2;

2. UNION ALL

SELECT 테이블1.컬럼명1, 테이블1.컬럼명2
FROM 테이블1
UNION ALL
SELECT 테이블2.컬럼명2, 테이블2.컬럼명2
FROM 테이블2;